import asyncio

def add_one(number: int) -> int:
    return number + 1


async def coroutine_add_one(number: int) -> int:
    return number + 1


print('add_one:', add_one, type(add_one))
print('coroutine_add_one:', coroutine_add_one, type(coroutine_add_one))  # "async def" is a function, result of invoking it is the very "coroutine"

function_result = add_one(1)
coroutine_result = coroutine_add_one(1)

print(f'Function result is {function_result} and the type is {type(function_result)}')
print(f'Coroutine result is {coroutine_result} and the type is {type(coroutine_result)}')

result = asyncio.run(coroutine_result)  # TypeError: 'coroutine' object is not callable
print(f'{type(result)}: {result}')

result = asyncio.run(coroutine_add_one(4))
print(f'{type(result)}: {result}')
